﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


/** 
 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
 * Description: 
 * Author: Heller (HellerSong@outlook.com)
 * CreationTime: 3/4/2015 2:14:32 PM
 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 
 **/
namespace DevAlogrithm.Alogrithm
{
    public class Recursion
    {
        /* 递归：函数调用自身
        * 递归满足的2个条件：
        *      1）调用自身，有反复执行的过程
        *      2）递归出口，有跳出反复执行过程的条件
        */

        /* 阶乘
         *  n! = n * (n - 1) * (n - 2) * ... * 1 (n > 0)
         *  一个分支，一层一层的进入，再返回
         */
        public static int factorial1(int i)
        {
            int sum = 0;

            if (i == 0)
                return 1;
            else
                sum = i * factorial2(sum, i - 1);
            return sum;
        }
        public static int factorial2(int sum, int i)
        {
            if (i == 0)
                return 1;
            else
                sum = i * factorial2(sum, i - 1);
            return sum;
        }
        public static int factorial3(int i)
        {
            if (i == 0)
                return 1;
            else
                return i * factorial3(i - 1);
        }

        /* 全排列
         * 
         */
    }
}
